<?php
require_once $_SERVER['rootplateforme'].'/classes/Serveur.class.php';
require_once $_SERVER['rootplateforme'].'/classes/ConnectToBD_cmix.class.php';
require_once $_SERVER['rootplateforme'].'/classes/ConnectToBD_tc.class.php';
require_once $_SERVER['rootplateforme'].$_SERVER['Cmix_bdd'].'/CMIX_bdd.php';
require_once $_SERVER['rootplateforme'].$_SERVER['TrivialChase_bdd'].'/TrivialChase_bdd.php';
 
class ServeurTest extends PHPUnit_Framework_TestCase {
	private $serveur;
	
	public static function setUpBeforeClass()
    {
        CreateBD::create();
		CMIX_bdd::create();
    }
	
	public function setUp()
	{
		$this->serveur=new Serveur();
		
		//Connexion a la BDD
		
		$idcon_tc=ConnectToBD_tc::connexion();
		$idcon_cmix=ConnectToBD_cmix::connexion();
		
		//serveur 
		$requete="INSERT INTO `serveur` (`id_serveur` ,`nom_serveur` ,`langue_serveur`)
		VALUES ('1', 'fruit', 'fr'),
				('2', 'legume', 'fr'),
				('3', 'pierre', 'fr');";
		$reqprep=$idcon_cmix->prepare($requete);
		$reqprep->execute();

		//salle 
		$requete="INSERT INTO `salle` (`id_salle` ,`nom_salle` ,`id_serveur`,`nb_joueur`)
		VALUES 
		('1', 'tomate', '1','3'),
		('2', 'orange', '1','55'),
		('3', 'cerise', '1','90'),
		('4', 'abricot', '1','2')";
		$reqprep=$idcon_tc->prepare($requete);
		$reqprep->execute();
		
		//salle_joueur 
		$liste_joueur=array(1=>'labib',3=>'bastien',6=>'lydie',2=>'freud',10=>'fabrice');
		$lj=serialize($liste_joueur);
		$requete="INSERT INTO `salle_joueur` (`id_salle` ,`list_joueur`)VALUES 
		('1', '$lj'),
		('4', '$lj')";
		$reqprep=$idcon_tc->prepare($requete);
		$reqprep->execute();
		
		
		// table_jeu
		$requete="INSERT INTO `table_jeu` (`id_table` ,`nom_table` ,`id_serveur` ,`id_salle` ,`list_spectateur` ,`list_joueur`)VALUES 
		('1', 'rouge', '1', '1', NULL , NULL ),
		('2', 'bleu', '1', '3', NULL , NULL ),
		('3', 'vert', '1', '4', NULL , NULL ),
		('4', 'violet', '1', '1', NULL , NULL ),
		('5', 'rose', '1', '2', NULL , NULL );";
		$reqprep=$idcon_tc->prepare($requete);
		$reqprep->execute();		
	}
		
	
	/**
	*Obj: Donne le nombre de salle dans un serveur. Teste la valeur de retour
	*cas d'utilisation : Le serveur existe. Il y a des salles dans ce serveur. nombre de salle dans le serveur 1?
	*attendu: 4
	*rapport: OK
	*/
	public function test_nombre_salle()
	{
		$attendu=4;
		$resultat=Serveur::nombre_salle(1);
		$this->assertEquals($resultat,$attendu);
	}
	
	/**
	*Obj: Donne le nombre de salle dans un serveur
	*cas d'utilisation : Le serveur n'existe pas. nombre de salle dans le serveur 4?
	*attendu: 0
	*rapport: OK
	*/
	public function test_nombre_salle_2()
	{
		$attendu=0;
		$resultat=Serveur::nombre_salle(4);
		$this->assertEquals($resultat,$attendu);
	}
	
	/**
	* Donne le nombre de tables dans le serveur $id_serveur. Teste la valeur de retour
	*cas d'utilisation: Le serveur existe. Il y a des tables dans ce serveur. nombre de tables dans le serveur 1.
	*attendu : 5
	*rapport : OK
	*/
	public function test_nombre_tables()
	{
		$attendu =5;
		$resultat=Serveur::nombre_table(1);
		$this->assertEquals($resultat,$attendu);
	}
	
	/**
	* Donne le nombre de tables dans le serveur $id_serveur. Teste la valeur de retour
	*cas d'utilisation: Le serveur n'existe pas. nombre de tables dans le serveur 4.
	*attendu : 0
	*rapport : OK
	*/
	public function test_nombre_tables_2()
	{
		$attendu =0;
		$resultat=Serveur::nombre_table(4);
		$this->assertEquals($resultat,$attendu);
	}
	
	
	/**
	* Donne le nombre de joueurs dans le serveur $id_serveur. Teste la valeur de retour
	*cas d'utilisation: Le serveur existe. Il y a des joueurs dans ce serveur. nombre de tables dans le serveur 1.
	*attendu : 150
	*rapport : OK
	*/
	public function test_nombre_joueur()
	{
		$attendu =150;
		$resultat=Serveur::nombre_joueur(1);
		$this->assertEquals($resultat,$attendu);
	}
	
	/**
	* Donne le nombre de joueurs dans le serveur $id_serveur. Teste la valeur de retour
	*cas d'utilisation: Le serveur n'existe pas. nombre de tables dans le serveur 4.
	*attendu : 0
	*rapport : OK
	*/
	public function test_nombre_joueur_2()
	{
		$attendu =0;
		$resultat=Serveur::nombre_joueur(4);
		$this->assertEquals($resultat,$attendu);
	}
	
	/**
	* Ajoute une salle dans un serveur. teste la valeur de retour
	* cas d'utilisation: Le serveur existe. La salle 5 n'existe pas. On ajoute la salle 5, pastheque dans le serveur 1
	* attendu: true
	* rapport OK
	**/
	public function test_ajouter_salle()
	{
		$attendu=true;
		$resultat=Serveur::ajouter_salle(1,5,'pastheque');
		$this->assertEquals($resultat,$attendu);
	}
	
	/**
	* Ajoute une salle dans un serveur. Teste la valeur de retour
	* cas d'utilisation: Le serveur existe. La salle 4 existe deja. On ajoute la salle 4, pastheque dans le serveur 1
	* attendu: false
	* rapport OK
	**/
	public function test_ajouter_salle_2()
	{
		$attendu=false;
		$resultat=Serveur::ajouter_salle(1,4,'pastheque');
		$this->assertEquals($resultat,$attendu);
	}
	
	/**
	* Supprime une salle du serveur . Teste la valeur de retour
	* cas d'utilisation: Le serveur existe. La salle 4 existe. On supprime la salle 4 du serveur 1
	* attendu : true
	* rapport : OK
	**/
	public function test_supprimer_salle()
	{
		$attendu=true;
		$resultat=Serveur::supprimer_salle(1,4);
		$this->assertEquals($resultat,$attendu);	
	}
	
	/**
	* Donne la liste de tous les serveurs. Teste la valeur de retour
	* cas d'utilisation:Il y a des serveurs.
	* attendu:"1 fruit francais, 2 legume francais, 3 pierre francais"
	* rapport: OK
	**/
	public function test_lister_serveur()
	{
		$chaine="";
		$attendu = "1 fruit fr, 2 legume fr, 3 pierre fr, ";
		$tableau=Serveur::lister_serveurs();	
		$i=0;
		foreach($tableau as $valeur)
		{
			$chaine=$chaine.$valeur['id_serveur'].' '.$valeur['nom_serveur'].' '.$valeur['langue_serveur'].', ';
		}
		$this->assertEquals($chaine,$attendu);
	}
	
	/**
	* Donne le nom d'un serveur avec son id. Teste la valeur de retour
	* cas d'utilisation : Le serveur existe. On veut le nom du serveur 2
	* attendu : legume
	* rapport : OK
	**/
	public function test_get_nom_serveur()
	{
		$attendu="legume";
		$resultat=$this->serveur->get_nom_serveur(2);
		$this->assertEquals($resultat,$attendu);
	}
	
	/***************************************************************************************************************/
	/**
	* Supprime tous les elements qui sont dans la base de donnees.
	**/
	public function tearDown()
	{
		CreateBD::vider_toutes_tables();
		CMIX_bdd::vider_toutes_tables();
		
	}
	
	public static function tearDownAfterClass()
    {
        CreateBD::supprimer_base();
		CMIX_bdd::supprimer_base();
    }
	
		

	
}
		
		